package a07_二叉树;

/**
 * <p>
 * a12_找左下角的值
 * </p>
 * 左下角的值：最后一行左下脚的值
 *  最后一行：深度最大的叶子节点
 *  左下角：这个就看遍历顺序，因为我们的前中后序遍历都是先左的，
 *          所以不管采用哪种，找到的的一个深度最大的叶子节点就是
 * 递归法：
 *
 *
 * @author flyduck
 * @since 2024-09-02
 */
public class a16_找左下角的值 {

    public static void main(String[] args) {
        TreeNode treeNode = new TreeNode(2, new TreeNode(1), new TreeNode(3));
        a16_找左下角的值 a16_找左下角的值 = new a16_找左下角的值();
        int bottomLeftValue = a16_找左下角的值.findBottomLeftValue(treeNode);
        System.out.println("bottomLeftValue = " + bottomLeftValue);

    }

    public Integer maxDepth = Integer.MIN_VALUE;//记录二叉树里面的最大深度
    public Integer result;//如果找到比我们目前的深度大的话，更新result

    public int findBottomLeftValue(TreeNode root) {
        traversal(root, 0);
        return result;
    }

    /**
     *
     * @param node
     * @param depth 当前遍历的深度，传到下一个迭代修改值不影响当前的数据，只是为了下一个知道当前遍历的深度
     */
    public void traversal(TreeNode node,Integer depth){
        if (node == null) {
            return;
        }
        depth++;
        if (node.left == null && node.right == null){
            if(depth > maxDepth){
                maxDepth = Math.max(depth, maxDepth);
                result = node.val;
            }
        }
        traversal(node.left, depth);
        traversal(node.right, depth);
    }
}
